/**
 * 求一个二叉树的
 */
#include"BiTree.h"
//用来层序遍历的队列
#define MAX_SIZE 100
typedef struct 
{
    BiTree *data[MAX_SIZE];//保存节点
    int level[MAX_SIZE];//保存data中对应节点的层次
    int front,rear;
}Queue;
Queue Qu;

int bWidth(BiTree *b){
    BiTree *p;
    int k,max,i,n;
    Qu.front=Qu.rear=-1;//初始队列为空
    Qu.rear++;
    Qu.data[Qu.rear]=b;//根入队
    Qu.level[Qu.rear]=1;//根的层次为1
    while (Qu.front<Qu.rear)
    {
        Qu.front++;//出队
        p=Qu.data[Qu.front];//出队节点
        k=Qu.level[Qu.front];//出队节点的层次
        if(p->left!=nullptr){//左孩子进入队列
            Qu.rear++;
            Qu.data[Qu.rear]=p->left;
            Qu.level[Qu.rear]=k+1;
        }
        if(p->right!=nullptr){
            Qu.rear++;
            Qu.data[Qu.rear]=p->right;
            Qu.level[Qu.rear]=k+1;
        }
    }//这些知识正常层序遍历，注意，这个层序遍历并不会弹出元素，只是移动头指针
    //这些元素用于后面求最大层数
    max=0;i=0;k=1;
    while (i<=Qu.rear)
    {
        n=0;
        while (i<Qu.rear&&Qu.level[i]==k)
        {
            n++;i++;
        }
        k=Qu.level[i];
        if(n>max) max=n;//保存最大的n
        
    }
    
}